package agenda.contatos.bsi4;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Scanner;

/**
 *
 * @author Uli Oreggia
 */
public class AgendaContatosBsi4 {
    public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
        Agenda agenda = new Agenda();
        Scanner scanner = new Scanner(System.in);
        boolean loopTrigger = true;
        
        while(loopTrigger) {
            System.out.println("BEM VINDO A AGENDA DE CONTATOS");
            System.out.println("O que deseja fazer?");
            System.out.println("\r\n");
            System.out.println("1. Inserir um novo contato");
            System.out.println("2. Listar contatos existentes");
            System.out.println("3. Pesquisar por contatos na lista");
            System.out.println("4. Editar um contato");
            System.out.println("5. Excluir um contato");
            System.out.println("6. Salvar a agenda");
            System.out.println("7. Abrir uma agenda salva");
            System.out.println("0. Sair\r\n");
            
            int proximaAcao = scanner.nextInt();
            //Quando scanner le um inteiro, ele não finaliza a linha, fazendo com que o console pule
            //a leitura da proxima entrada. Por isso necessita-se ler uma linha vazia
            scanner.nextLine();
            
            boolean loopTriggerNivel2 = true;
            
            switch(proximaAcao) {
                case 1:
                    while(loopTriggerNivel2) {
                        Contato novoContato = new Contato();
                        
                        System.out.println("OPÇÃO 1: INSERIR NOVO CONTATO");
                        System.out.println("\r\n");
                        System.out.println("Digite o nome do novo contato:");
                        
                        String nomeContato = scanner.nextLine();
                        
                        System.out.println("\r\n");
                        System.out.println("Digite o telefone do novo contato ou 0, caso queira em branco:");
                        
                        String novoTelefone = scanner.nextLine();
                        scanner.nextLine(); //fechando a linha
                        
                        novoContato.setNome(nomeContato);
                        novoContato.setTelefone(1, novoTelefone);
                        
                        int indiceNovoContato = agenda.inserir(novoContato);
                        
                        System.out.println("\r\n");
                        System.out.println("Novo contato inserido na posição: " + (indiceNovoContato + 1));
                        
                        System.out.println("O que deseja fazer?");
                        System.out.println("\r\n");
                        System.out.println("1. Inserir mais um novo contato");
                        System.out.println("0. Voltar ao menu inicial");
                        
                        int proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        if (proximaAcaoNivel2 == 0) {
                            loopTriggerNivel2 = false;
                        }
                    }
                    
                    break;
                    
                case 2:
                    while(loopTriggerNivel2) {
                        System.out.println("OPÇÃO 2: LISTAR CONTATOS EXISTENTES");
                        System.out.println("\r\n");
                        
                        agenda.listar();
                        
                        System.out.println("Fim ds contatos na agenda");
                        System.out.println("\r\n");
                        System.out.println("O que deseja fazer?");
                        System.out.println("\r\n");
                        System.out.println("1. Listar novamente");
                        System.out.println("0. Voltar ao menu inicial");
                        
                        int proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        if (proximaAcaoNivel2 == 0) {
                            loopTriggerNivel2 = false;
                        }
                    }
                    
                    break;
                    
                case 3:
                    while(loopTriggerNivel2) {
                        System.out.println("OPÇÃO 3: PESQUISAR CONTATO NA AGENDA");
                        System.out.println("\r\n");
                        
                        System.out.println("de que maneira?");
                        System.out.println("\r\n");
                        System.out.println("1. Por nome do contato");
                        System.out.println("2. Por indice de inclusão");
                        
                        int proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        if (proximaAcaoNivel2 == 1) {
                            System.out.println("digite o nome do contato que esta procurando");
                            System.out.println("\r\n");
                            
                            String nomeContato = scanner.nextLine();
                            
                            agenda.pesquisarPorNome(nomeContato);
                        }
                        else if (proximaAcaoNivel2 == 2) {
                            System.out.println("digite o indice do contato que esta procurando");
                            System.out.println("\r\n");
                            
                            int indice = scanner.nextInt();
                            scanner.nextLine(); //fechando a linha
                            
                            agenda.pesquisarPorIndice(indice);
                        }
                        
                        System.out.println("\r\n");
                        System.out.println("O que deseja fazer?");
                        System.out.println("\r\n");
                        System.out.println("1. Pesquisar novamente");
                        System.out.println("0. Voltar ao menu inicial");
                        
                        proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        if (proximaAcaoNivel2 == 0) {
                            loopTriggerNivel2 = false;
                        }
                    }
                    
                    break;
                    
                case 4:
                    while(loopTriggerNivel2) {
                        System.out.println("OPÇÃO 4: EDITAR UM CONTATO");
                        System.out.println("\r\n");
                        
                        System.out.println("digite o indice do contato que quer editar");
                        System.out.println("\r\n");

                        int indice = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha

                        
                        try {
                            Contato contatoASerEditado = agenda.editar(indice);
                            
                            System.out.println("Editando o contato:");
                            agenda.pesquisarPorIndice(indice);

                            System.out.println("\r\n");
                            System.out.println("Digite o novo nome do contato ou 0, caso não queira alterar:");

                            String novoNome = scanner.nextLine();

                            if (! novoNome.equals("0")) {
                                contatoASerEditado.setNome(novoNome);
                            }
                            
                            System.out.println("\r\n");
                            System.out.println("Digite o novo telefone do contato ou 0, caso não queira alterar:");

                            String novoTelefone = scanner.nextLine();
                            scanner.nextLine(); //fechando a linha
                            
                            if (novoTelefone.length() != 0) {
                                contatoASerEditado.setTelefone(1, novoTelefone);
                            }
                            
                            System.out.println("Edição concluida");
                            agenda.pesquisarPorIndice(indice);
                        }
                        catch (NullPointerException e) {
                           System.out.println(indice + ": contato não encontrado");
                        }
                        
                        System.out.println("O que deseja fazer?");
                        System.out.println("\r\n");
                        System.out.println("1. Editar outro contato");
                        System.out.println("0. Voltar ao menu inicial");
                        
                        int proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        if (proximaAcaoNivel2 == 0) {
                            loopTriggerNivel2 = false;
                        }
                    }
                    
                    break;
                    
                case 5:
                    while(loopTriggerNivel2) {
                        System.out.println("OPÇÃO 5: EXCLUIR UM CONTATO");
                        System.out.println("\r\n");
                        
                        System.out.println("digite o indice do contato que quer excluir");
                        System.out.println("\r\n");
                        
                        int indice = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        agenda.pesquisarPorIndice(indice);
                        
                        System.out.println("tem certeza que deseja excluir esse contato?");
                        System.out.println("\r\n");
                        System.out.println("1. Sim");
                        System.out.println("0. Cancelar");
                        
                        int proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        if (proximaAcaoNivel2 == 1) {
                            if (agenda.excluir(indice)) {
                                System.out.println("Contato excluido com sucesso");
                            }
                            else {
                                System.out.println("Contato não encontrado");
                            }
                        }
                        
                        System.out.println("O que deseja fazer?");
                        System.out.println("\r\n");
                        System.out.println("1. Excluir outro contato");
                        System.out.println("0. Voltar ao menu inicial");
                        
                        proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha
                        
                        if (proximaAcaoNivel2 == 0) {
                            loopTriggerNivel2 = false;
                        }
                    }
                    
                    break;
                        
                case 6:
                    agenda.salvar();

                    while(loopTriggerNivel2) {
                        System.out.println("Sua agenda foi salva e ficara disponivel na proxima execucao");
                        System.out.println("\r\n");

                        System.out.println("O que deseja fazer?");
                        System.out.println("\r\n");
                        System.out.println("0. Voltar ao menu inicial");

                        int proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha

                        if (proximaAcaoNivel2 == 0) {
                            loopTriggerNivel2 = false;
                        }
                    }

                    break;

                case 7:
                    FileInputStream fis = null;
                    ObjectInputStream ois = null;

                    try {
                        fis = new FileInputStream("agenda.bsi");
                        ois = new ObjectInputStream(fis);

                        agenda = (Agenda) ois.readObject();
                    } finally {
                        ois.close();
                        fis.close();
                    }

                    while(loopTriggerNivel2) {
                        System.out.println("Sua agenda foi encontrada e carregada");
                        System.out.println("\r\n");

                        System.out.println("O que deseja fazer?");
                        System.out.println("\r\n");
                        System.out.println("0. Voltar ao menu inicial");

                        int proximaAcaoNivel2 = scanner.nextInt();
                        scanner.nextLine(); //fechando a linha

                        if (proximaAcaoNivel2 == 0) {
                            loopTriggerNivel2 = false;
                        }
                    }
                    
                    break;
                    
                case 0:
                    loopTrigger = false;
                    break;
            }
        }
    }
}